﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

#pragma once
#include "IFamilyConnector.h"
#include "GmFamilyService.h"
#include "GbmpGuid.h"
#include "UniIdentity.h"

namespace gfam
{
    /// \brief 二维连接件基类
    class GM_FAMILY_SERVICE_EXPORT IFamilyConnector2d : public gfam::IFamilyConnector
    {
        DEFINE_CAST_DERIVED(gfam::IFamilyConnector2d, gfam::IFamilyConnector)

    public:
        /// \brief 创建二维连接点
        ///
        /// \param pDoc 文档指针，输入为空时，创建二维连接点失败，返回nullptr
        /// \param curveId 二维线Id，Id无效时，创建二维连接点失败，返回nullptr
        /// \param normalizedParameterOnCurve 二维连接点在二维线上的位置，用归一化参数表示，范围是[0,1],小于0时设置为0，大于1时设置为1
        /// \return 创建成功返回二维连接点指针，创建失败返回nullptr
        static IFamilyConnector2d* Create(gcmp::IDocument* pDoc, const gcmp::ElementId& curveId, double normalizedParameterOnCurve);

        /// \brief 获取连接件所在二维线id
        /// 
        /// \return 二维线id
        virtual gcmp::ElementId GetCurveId() const = 0;

        /// \brief 设置连接件所在二维线id(目前仅支持二维线)
        /// 
        /// \param curveId 二维线Id，Id无效时，创建二维连接点失败，返回nullptr
        /// \return 连接件坐标系
        virtual void SetCurveId(const gcmp::ElementId& curveId) = 0;

        /// \brief 获取二维连接点在二维线上的位置
        /// 
        /// \return 二维连接点在二维线上的位置,用归一化参数表示，范围是[0,1]
        virtual double GetNormalizedParameterOnCurve() const = 0;

        /// \brief 设置二维连接点在二维线上的位置

        /// \param normalizedParameterOnCurve 二维连接点在二维线上的位置，用归一化参数表示，范围是[0,1]，小于0时设置为0，大于1时设置为1
        virtual void SetNormalizedParameterOnCurve(double normalizedParameterOnCurve) = 0;

        /// \brief 获取连接件类型
        /// 
        /// \return 连接件类型
        virtual Int32 GetTargetConnectorTypeId()const = 0;

        /// \brief 设置连接件类型
        /// 
        /// \param connectorType 连接件类型
        virtual void SetTargetConnectorTypeId(Int32 connectorTypeId) = 0;

        /// \brief 获取Implementation Uid
        ///
        /// \return UniIdentity 返回ImplementationUid
        static gcmp::UniIdentity GetImplementationUid();

    };

} 
